--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / mapLinkUtils.js
Displaying Raw • Download
meshchatx/src/frontend/js/mapLinkUtils.js e0f1f99cd1c208c5008a936230c38e448dddd45d (e0f1f99c) Text, 2.70 KB
T8b949e// SPDX-License-Identifier: 0BSD
T8b949e/**
* Offline-friendly map deep links: meshchatx://map?lat=&lon=&z=&layers=&label=
* (meshchat://map is accepted as an alias.)
*/
Tff7b72const Te6edf3MAP_URI_IN_TEXT_RE Tff7b72= Ta5d6ff/(?:meshchatx|meshchat):\/\/map\?[^\s<>]*/giTb4b4b4;
Tff7b72export Tff7b72function Te6edf3findMapUriInContentTb4b4b4(Te6edf3textTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3text Tff7b72|| Tff7b72typeof Te6edf3text Tff7b72!== Ta5d6ff"string"Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3matches Tff7b72= Te6edf3textTb4b4b4.Te6edf3matchTb4b4b4(Te6edf3MAP_URI_IN_TEXT_RETb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3matches Tff7b72&& Te6edf3matchesTb4b4b4.Te6edf3length Tff7b72? Te6edf3matchesTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72: Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72export Tff7b72function Te6edf3parseMeshchatMapUriTb4b4b4(Te6edf3uriTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3uri Tff7b72|| Tff7b72typeof Te6edf3uri Tff7b72!== Ta5d6ff"string"Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3s Tff7b72= Te6edf3uriTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Ta5d6ff/^(meshchatx|meshchat):\/\/map\b/iTb4b4b4.Te6edf3testTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3u Tff7b72= Tff7b72new Te6edf3URLTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3lat Tff7b72= Tffa657parseFloatTb4b4b4(Te6edf3uTb4b4b4.Te6edf3searchParamsTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"lat"Tb4b4b4) Tff7b72?? Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3lon Tff7b72= Tffa657parseFloatTb4b4b4(Te6edf3uTb4b4b4.Te6edf3searchParamsTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"lon"Tb4b4b4) Tff7b72?? Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3latTb4b4b4) Tff7b72|| Tff7b72!Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3lonTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3zRaw Tff7b72= Te6edf3uTb4b4b4.Te6edf3searchParamsTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"z"Tb4b4b4) Tff7b72?? Te6edf3uTb4b4b4.Te6edf3searchParamsTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"zoom"Tb4b4b4) Tff7b72?? Ta5d6ff"10"Tb4b4b4;
Tff7b72let Te6edf3zoom Tff7b72= Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Tffa657parseFloatTb4b4b4(Te6edf3zRawTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3zoomTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3zoom Tff7b72= T79c0ff10Tb4b4b4;
Tb4b4b4}
Te6edf3zoom Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(T79c0ff22Tb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3layers Tff7b72= Tb4b4b4(Te6edf3uTb4b4b4.Te6edf3searchParamsTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"layers"Tb4b4b4) Tff7b72|| Ta5d6ff""Tb4b4b4)Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3label Tff7b72= Tb4b4b4(Te6edf3uTb4b4b4.Te6edf3searchParamsTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"label"Tb4b4b4) Tff7b72|| Ta5d6ff""Tb4b4b4)Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{ Te6edf3latTb4b4b4, Te6edf3lonTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3layersTb4b4b4, Te6edf3labelTb4b4b4, Te6edf3rawTff7b72: Te6edf3s Tb4b4b4}Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72export Tff7b72function Te6edf3buildMeshchatMapUriTb4b4b4(Tb4b4b4{ Te6edf3latTb4b4b4, Te6edf3lonTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3layers Tff7b72= Ta5d6ff""Tb4b4b4, Te6edf3label Tff7b72= Ta5d6ff"" Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3z Tff7b72= Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Tffa657NumberTb4b4b4(Te6edf3zoomTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3parts Tff7b72= Tb4b4b4[Ta5d6ff`Ta5d6fflat=Tffd700${Tffa657encodeURIComponentTb4b4b4(Te6edf3latTb4b4b4)Tffd700}Ta5d6ff`Tb4b4b4, Ta5d6ff`Ta5d6fflon=Tffd700${Tffa657encodeURIComponentTb4b4b4(Te6edf3lonTb4b4b4)Tffd700}Ta5d6ff`Tb4b4b4, Ta5d6ff`Ta5d6ffz=Tffd700${Tffa657encodeURIComponentTb4b4b4(Te6edf3zTb4b4b4)Tffd700}Ta5d6ff`Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3layersTb4b4b4) Tb4b4b4{
Te6edf3partsTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff`Ta5d6fflayers=Tffd700${Tffa657encodeURIComponentTb4b4b4(Te6edf3layersTb4b4b4)Tffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3labelTb4b4b4) Tb4b4b4{
Te6edf3partsTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff`Ta5d6fflabel=Tffd700${Tffa657encodeURIComponentTb4b4b4(Te6edf3labelTb4b4b4)Tffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Ta5d6ff`Ta5d6ffmeshchatx://map?Tffd700${Te6edf3partsTb4b4b4.Te6edf3joinTb4b4b4(Ta5d6ff"&"Tb4b4b4)Tffd700}Ta5d6ff`Tb4b4b4;
Tb4b4b4}
Tff7b72export Tff7b72function Te6edf3buildWebHashMapUrlTb4b4b4(Tb4b4b4{ Te6edf3latTb4b4b4, Te6edf3lonTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3layers Tff7b72= Ta5d6ff""Tb4b4b4, Te6edf3label Tff7b72= Ta5d6ff"" Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3q Tff7b72= Tff7b72new Te6edf3URLSearchParamsTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3qTb4b4b4.Te6edf3setTb4b4b4(Ta5d6ff"lat"Tb4b4b4, Tffa657StringTb4b4b4(Te6edf3latTb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3qTb4b4b4.Te6edf3setTb4b4b4(Ta5d6ff"lon"Tb4b4b4, Tffa657StringTb4b4b4(Te6edf3lonTb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3qTb4b4b4.Te6edf3setTb4b4b4(Ta5d6ff"zoom"Tb4b4b4, Tffa657StringTb4b4b4(Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Tffa657NumberTb4b4b4(Te6edf3zoomTb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3layersTb4b4b4) Tb4b4b4{
Te6edf3qTb4b4b4.Te6edf3setTb4b4b4(Ta5d6ff"layers"Tb4b4b4, Te6edf3layersTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3labelTb4b4b4) Tb4b4b4{
Te6edf3qTb4b4b4.Te6edf3setTb4b4b4(Ta5d6ff"label"Tb4b4b4, Te6edf3labelTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3base Tff7b72= Tff7b72typeof Tffa657window Tff7b72!== Ta5d6ff"undefined" Tff7b72? Ta5d6ff`Tffd700${Tffa657windowTb4b4b4.Te6edf3locationTb4b4b4.Te6edf3originTffd700}Tffd700${Tffa657windowTb4b4b4.Te6edf3locationTb4b4b4.Te6edf3pathnameTffd700}Ta5d6ff` Tff7b72: Ta5d6ff""Tb4b4b4;
Tff7b72return Ta5d6ff`Tffd700${Te6edf3baseTffd700}Ta5d6ff#/map?Tffd700${Te6edf3qTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff`Tb4b4b4;
Tb4b4b4}
Tff7b72export Tff7b72function Te6edf3mapLinkKindFromMessageTb4b4b4(Te6edf3contentTb4b4b4, Te6edf3parsedTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3content Tff7b72&& Tff7b72typeof Te6edf3content Tff7b72=== Ta5d6ff"string" Tff7b72&& Ta5d6ff/^\s*MeshChatX\s+map\s+ping\b/iTb4b4b4.Te6edf3testTb4b4b4(Te6edf3contentTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"ping"Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3parsedTff7b72?Tb4b4b4.Te6edf3label Tff7b72&& Ta5d6ff/^ping$/iTb4b4b4.Te6edf3testTb4b4b4(Te6edf3parsedTb4b4b4.Te6edf3labelTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"ping"Tb4b4b4;
Tb4b4b4}
Tff7b72return Ta5d6ff"view"Tb4b4b4;
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────